// 订单状态配置文件
// 该文件定义了系统中所有可用的订单状态选项

/**
 * 订单状态配置对象
 * 用于统一管理系统中订单状态的显示和处理
 * @namespace orderStatusConfig
 */
module.exports = {
  /**
   * 订单状态选项列表
   * 使用数字代码存储状态，提高查询效率和数据一致性
   * @type {Array<Object>}
   * @property {number} value - 状态值（数字代码）
   * @property {string} label - 状态显示文本
   * @property {string} tagType - Element UI标签类型（用于前端显示）
   */
  statusOptions: [
    {
      value: 1,        // 状态值：已下单
      label: '已下单',  // 显示文本
      tagType: 'info'  // Element UI标签类型
    },
    {
      value: 2,        // 状态值：已发单
      label: '已发单',  // 显示文本
      tagType: 'warning'  // Element UI标签类型
    },
    {
      value: 3,        // 状态值：已入库
      label: '已入库',  // 显示文本
      tagType: 'warning'  // Element UI标签类型
    },
    {
      value: 4,        // 状态值：已收款
      label: '已收款',  // 显示文本
      tagType: 'warning'  // Element UI标签类型
    },
    {
      value: 5,        // 状态值：已出库
      label: '已出库',  // 显示文本
      tagType: 'warning'  // Element UI标签类型
    },
    {
      value: 6,        // 状态值：反修中
      label: '反修中',  // 显示文本
      tagType: 'warning'  // Element UI标签类型
    },
    {
      value: 7,       // 状态值：已完成
      label: '已完成',  // 显示文本
      tagType: 'success'  // Element UI标签类型
    }
  ],

  /**
   * 根据状态值获取状态显示文本
   * @param {number} statusValue - 状态值
   * @returns {string} 状态显示文本
   * 
   * 该函数用于将数字状态代码转换为可读的文本
   * 如果找不到对应的状态，则返回原始值
   */
  getStatusLabel(statusValue) {
    // 在状态选项中查找匹配的值
    const status = this.statusOptions.find(option => option.value === statusValue);
    // 如果找到匹配项，返回标签文本；否则返回原始值
    return status ? status.label : statusValue;
  },

  /**
   * 根据状态值获取标签类型
   * @param {number} statusValue - 状态值
   * @returns {string} Element UI标签类型
   * 
   * 该函数用于获取状态对应的Element UI标签类型
   * 用于前端显示不同颜色的标签
   */
  getStatusTagType(statusValue) {
    // 在状态选项中查找匹配的值
    const status = this.statusOptions.find(option => option.value === statusValue);
    // 如果找到匹配项，返回标签类型；否则返回默认的info类型
    return status ? status.tagType : 'info';
  },

  /**
   * 获取所有状态值的数组
   * @returns {Array<number>} 所有状态值的数组
   * 
   * 该函数用于获取所有可用状态值的数组
   * 主要用于数据验证和前端选项生成
   */
  getStatusValues() {
    // 使用map函数提取所有状态值
    return this.statusOptions.map(option => option.value);
  },

  /**
   * 根据状态标签获取状态值
   * @param {string} statusLabel - 状态标签
   * @returns {number} 状态值
   * 
   * 该函数用于将状态标签文本转换为数字代码
   * 主要用于处理前端传入的字符串状态
   */
  getStatusValueByLabel(statusLabel) {
    // 在状态选项中查找匹配的标签
    const status = this.statusOptions.find(option => option.label === statusLabel);
    // 如果找到匹配项，返回状态值；否则返回默认值1（待处理）
    return status ? status.value : 1; // 默认返回1（待处理）
  }
};